package de.bml.versandanzeige;

import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

public class HauptActivity extends Activity {

	public final static String ID_EXTERN_EXTRA = "label";
	public final static String UUID_EXTRA = "uuid";
	public final static String GEGENSTAND_EXTRA = "gegenstand";
	public final static String GEGENSTANDSTYP_EXTRA = "gegenstandstyp";
	public final static String STANDORT_EXTRA = "standort";

	private final static int REQUEST_STANDORT_AUSWAEHLEN = 0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Gegenstandstyp.init(getApplicationContext());
		Gegenstand.init(getApplicationContext());
		Standort.init(getApplicationContext());
	}

	@Override
	protected void onResume() {
		super.onResume();
		Standort aktuellerStandort = Standort.getAktuell();
		if (aktuellerStandort != null) {
			((Button) findViewById(R.id.button_aktueller_standort))
					.setText("Standort: " + aktuellerStandort.getLabel());
		} else {
			((Button) findViewById(R.id.button_aktueller_standort))
					.setText(R.string.kein_standort);
		}
	};

	/** Called when the user select the Scan button */
	public void scanCode(View view) {
		IntentIntegrator integrator = new IntentIntegrator(HauptActivity.this);
		integrator.initiateScan();
	}

	private void interpretiereIdExtern(String id_extern) {
		if (id_extern == null || id_extern.equals("")) {
			return;
		}
		List<Standort> standorte = Standort.getAll();
		List<Gegenstand> gegenstaende = Gegenstand.getAll();
		for (Standort standort : standorte) {
			if (id_extern.equals(standort.getIdExtern())) {
				standortAnzeigen(standort);
				return;
			}
		}
		for (Gegenstand gegenstand : gegenstaende) {
			if (id_extern.equals(gegenstand.getIdExtern())) {
				gegenstandAnzeigen(gegenstand);
				return;
			}
		}
		scanWeiterverarbeiten(id_extern);
	}

	private void scanWeiterverarbeiten(String id_extern) {
		Intent zuordnenIntent = new Intent(this, zuIdZuordnenActivity.class);
		zuordnenIntent.putExtra(ID_EXTERN_EXTRA, id_extern);
		startActivity(zuordnenIntent);
	}

	public void sqlTest(View view) {
		Intent intent = new Intent(this, GegenstandstypAuswaehlenActivity.class);
		startActivity(intent);
	}

	private void standortAnzeigen(Standort standort) {
		if (standort == null) {
			Intent intent = new Intent(this, StandortAuswaehlenActivity.class);
			startActivityForResult(intent, REQUEST_STANDORT_AUSWAEHLEN);
		} else {
			Standort.setAktuell(null);
			onResume();
		}
	}

	public void aktuellenStandortAnzeigen(View view) {
		standortAnzeigen(Standort.getAktuell());
	}

	private void gegenstandAnzeigen(Gegenstand gegenstand) {
		Intent gegenstandAnzeigen = new Intent(this,
				GegenstandAnzeigenActivity.class);
		gegenstandAnzeigen.putExtra(HauptActivity.GEGENSTAND_EXTRA,
				gegenstand.getId());
		startActivity(gegenstandAnzeigen);
	}

	public void alleGegenstaendeAnzeigen(View view) {
		Intent intent = new Intent(this, GegenstaendeAuflistenActivity.class);
		startActivity(intent);
	}

	public void alleStandorteAnzeigen(View view) {
		Intent intent = new Intent(this, StandorteAuflistenActivity.class);
		startActivity(intent);
	}

	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent intent) {
		// If the request went well (OK) and the request was
		// PICK_CONTACT_REQUEST
		if (resultCode == Activity.RESULT_OK) {
			switch (requestCode) {
			case IntentIntegrator.REQUEST_CODE:
				IntentResult result = IntentIntegrator.parseActivityResult(
						requestCode, resultCode, intent);
				if (result != null) {
					String contents = result.getContents();
					// TextView itemInfoTv =
					// (TextView)findViewById(R.id.textView_itemInformation);
					if (contents != null) {
						interpretiereIdExtern(contents);
					}
				}
				break;
			case REQUEST_STANDORT_AUSWAEHLEN:
				Standort.setAktuell(Standort.get(intent.getLongExtra(
						STANDORT_EXTRA, 0)));
			}
		}
	}
}
